<?php

namespace app\home\controller;

// 引入TP基础控制器
use think\Controller;

class Index  extends Controller
{
    public function _initialize()
    {
        parent::_initialize();
        // 如果用助手调用多级模型 例如：路径：app\common\model\Business\Business
        $this->BusinessModel = model('Business.Business');
        $this->SubjectModel = model('Subject.Subject');
        $this->CategoryModel = model('Subject.Category');
    }

    // 首页
    public function index()
    {
        // 按照点赞数量排序
        $recommendlist = $this->SubjectModel->field('id,title,thumbs')->orderRaw('LPAD(LOWER(likes), 10,0) DESC')->limit(5)->select();
        /* 
            不带任何参数 自动定位当前操作的模板文件

            表示系统会按照默认规则自动定位模板文件，其规则是：
            当前模块/默认视图目录/当前控制器（小写）/当前操作（小写）.html
        */
        // 格式化数组
        // var_dump(collection($recommendlist)->toArray());exit;

        $catelist = $this->CategoryModel->order('weight', 'desc')->limit(5)->select();
        
        $list = [];

        foreach($catelist as $item){
            $info = $this->SubjectModel->where('cateid', $item['id'])->limit(6)->select();
            if($info)
            {
                $item['subject'] = $info;
                $list[] = $item;
            }
        }

        $this->assign([
            'status' => 'index',
            'recommendlist' => $recommendlist,
            'catelist' => $list
        ]);
        return $this->fetch();
    }

    // 注册页面
    public function register()
    {
        // 是否为 POST 请求
        if ($this->request->isPost()) {
            /* 
            使用$this->request对象 注意要继承 think\Controller 基础类
            param方法框架提供的用于自动识别GET、POST或者PUT请求的一种变量获取方式，是系统推荐的获取请求参数的方法
      
                获取$_POST变量
                第一个参数 接收参数
                第二个参数 默认值
                第三个参数 函数过滤
            
        */
            $mobile = $this->request->param('mobile', '', 'trim');
            $password = $this->request->param('password', '', 'trim');

            // 生成密码盐
            $salt = randstr();

            // 密码加密
            $password = md5($password.$salt);

            $data = [
                'mobile' => $mobile,
                'password' => $password,
                'salt' => $salt,
                'nickname' => $mobile
            ];

            // 模型新增数据  模型验证
            $result = $this->BusinessModel->validate('common/Business/Business')->save($data);

            // 系统的\think\Controller类内置了两个跳转方法success和error，用于页面跳转提示。
            if($result)
            {
                $this->success('注册成功', 'home/index/login');
            } else {
                // getError => 返回模型的错误信息
                $this->error($this->BusinessModel->getError());
            }
        }
        // 临时关闭当前模板的布局功能
        $this->view->engine->layout(false);
        return $this->fetch();
    }

    // 登陆页面
    public function login()
    {
        if($this->request->isPost())
        {
            $mobile = $this->request->param('mobile', '', 'trim');
            $password = $this->request->param('password', '', 'trim');

            // 查询是否用当前用户
            $businessinfo = $this->BusinessModel->where(['mobile' => $mobile])->find();

            if(!$businessinfo)
            {
                $this->error('用户不存在');
            }

            // 密码加密
            $password = md5($password.$businessinfo['salt']);

            if($password <> $businessinfo['password'])
            {
                $this->error('用户密码错误');
            }

            // 存储用户信息
            cookie('LoginUser', [
                'id' => $businessinfo['id'],
                'mobile' => $mobile
            ]);

            $this->success('登陆成功', 'home/index/index');

        }
        // 临时关闭当前模板的布局功能
        $this->view->engine->layout(false);
        return $this->fetch();
    }

    // 退出
    public function logout()
    {
        cookie('LoginUser', null);
        $this->success('退出登陆成功', 'home/index/login');
    }
}
